Реализация алгоритма нахождения расстановки 8 ферзей на шахматной доске, которые не бьют друг друга.
Реализован алгоритм со страницы Benchmark 8 ферзей (альтернативная ссылка).
Отличия от приведённой там программы:
Для начала расчёта нажмите В/О, С/П. После остановки будет 0. – найдена очередная, в данном случае первая, расстановка.
С учётом того, что все ферзи должны быть на разных вертикалях, то в регистрах R1…R8 будут записаны номера горизонталей для соответствующего ферзя.
Для следующей расстановки нажмите С/П.
Значения первой расстановки для контроля: 8, 4, 1, 3, 6, 2, 7, 5. Или в шахматной нотации: Фa8, Фb4, Фc1, Фd3, Фe6, Фf2, Фg7, Фh5. Как ни странно, первая расстановка получается дольше всех. Остальные вычисляются быстрее, но с разной скоростью. Ещё долго думает в конце, после 92-й расстановки, убеждаясь, что больше подходящих нет.
Когда все расстановки будут сделаны ПМК вместо нуля отобразит -1.
| R0 | Номер горизонтали для нового ферзя. |
|---|---|
| R1…R8 | Номера горизонталей ферзей 1…8. |
| R9 | Сколько ферзей уже удалось расставить. |
В процессе работы ПМК сам инициализирует все необходимые регистры, поэтому их начальное значение до запуска программы не играет роли.
| # | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
|---|---|---|---|---|---|---|---|---|---|---|
| 00 | | Cx | x→П9 | Fx=0 | 14 | П→x9 | 1 | + | x→П9 | 9 | − |
| 10 | | Fx≠0 | 46 | 8 | Кx→П9 | П→x9 | x→П0 | 1 | П→x0 | − | Fx<0 |
| 20 | | 02 | КП→x9 | КП→x0 | − | Fx≠0 | 34 | Fx2 | F√ | П→x9 | − |
| 30 | | П→x0 | + | Fx=0 | 16 | КП→x9 | 1 | − | Кx→П9 | Fx=0 | 14 |
| 40 | | П→x9 | 1 | − | x→П9 | Fx<0 | 34 | С/П | БП | 40 |
Если рассматривать задачу, как измеритель скорости, то первая расстановка получается через такой интервал:
| Программа | Операционка, оборудование | Результат |
|---|---|---|
| Расширенный эмулятор МК 61/54 | Android 13, CPU MTK G95, 8 ядер 2.05 ГГц | 55 сек. |
| Эмулятор МК-61 | Windows 7, Яндекс браузер 24.10.3.845, CPU Intel i5-2300, 4 ядра, 2.80 ГГц | 99 сек. |
Это данные при включенном ускорении в этих эмуляторах.